/**
 * @author Sam
 * @description 公共工具方法
 */

// import Vue from 'vue';

// 对Date的扩展，将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
// 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// 例子：
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
// (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
Date.prototype.Format = function(fmt) {
  var o = {
    "M+": this.getMonth() + 1, //月份
    "d+": this.getDate(), //日
    "H+": this.getHours(), //小时
    "m+": this.getMinutes(), //分
    "s+": this.getSeconds(), //秒
    "q+": Math.floor((this.getMonth() + 3) / 3), //季度
    S: this.getMilliseconds() //毫秒
  };
  if (/(y+)/.test(fmt))
    fmt = fmt.replace(
      RegExp.$1,
      (this.getFullYear() + "").substr(4 - RegExp.$1.length)
    );
  for (var k in o)
    if (new RegExp("(" + k + ")").test(fmt))
      fmt = fmt.replace(
        RegExp.$1,
        RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)
      );
  return fmt;
};

// URL 解析
let URL = require("url");
let urlFormat = require("querystring");

const Utils = {
  //   isIntegral: "cz",

  /*************************************************判断当前系统******************************************************************/
  getCurrentSystemiOS() {
    var u = navigator.userAgent;
    // var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
    var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
    return isiOS;
  },
  /*************************************************时间******************************************************************/
  /**
   * 时间戳转时间
   * @param format 时间格式
   * @param date   时间戳 默认当前时间
   */
  getTimeFormat(format, date) {
    // 调用：'yyyy-MM-dd'  'yyyy-MM-dd HH:mm:ss'
    let time = date ? date : new Date();
    return time.Format(format);
  },
  /**
   * 计算两个时间  时间间隔
   * @param time1  开始时间 yyyy-MM-dd HH:mm:ss 时间格式  必填
   * @param time2  结束时间 yyyy-MM-dd HH:mm:ss 时间格式  默认当前时间
   */
  calculateAtoBtimeDifference(time1, time2) {
    if (this.isEmpty(time1)) {
      return 0;
    }
    var self = this;
    return new Promise(function(resolve, rejected) {
      if (self.getCurrentSystemiOS()) {
        let end = new Date(time2.replace(/-/g, "/")).getTime();
        let star = new Date(time1.replace(/-/g, "/")).getTime();
        if (!isNaN(end) && !isNaN(star)) {
          resolve((end - star) / 1000);
        } else {
          rejected(0);
        }
      } else {
        let d1 = new Date(time1);
        time2 = time2 ? time2 : new Date();
        let d2 = new Date(time2);
        let difference = parseInt(d2 - d1);
        if (
          difference != undefined &&
          difference != null &&
          !isNaN(difference)
        ) {
          resolve(difference / 1000);
        } else {
          rejected(0);
        }
      }
    });
  },
  //这个函数是为了适应格式 比如：01分01秒;
  p(n) {
    return n < 10 ? "0" + n : n;
  },
  /***
   * 倒计时函数
   * @param time  时间格式 2222/5/19 00:00:00
   */
  newTime(time) {
    //定义当前时间
    var startTime = new Date();
    //定义结束时间
    var endTime = new Date(time || "2222/5/19 00:00:00");

    //算出中间差并且已毫秒数返回; 除以1000将毫秒数转化成秒数方便运算；
    var countDown = (endTime.getTime() - startTime.getTime()) / 1000;

    //获取天数 1天 = 24小时  1小时= 60分 1分 = 60秒
    var oDay = parseInt(countDown / (24 * 60 * 60));

    //获取小时数
    //特别留意 %24 这是因为需要剔除掉整的天数;
    var oHours = parseInt((countDown / (60 * 60)) % 24);

    //获取分钟数
    //同理剔除掉分钟数
    var oMinutes = parseInt((countDown / 60) % 60);

    //获取秒数
    //因为就是秒数  所以取得余数即可
    var oSeconds = parseInt(countDown % 60);

    //别忘记当时间为0的，要让其知道结束了;
    if (countDown < 0) {
      oDay = 0;
      oHours = 0;
      oMinutes = 0;
      oSeconds = 0;
    }
    return {
      Day: this.p(oDay),
      Hours: this.p(oHours),
      Minutes: this.p(oMinutes),
      Seconds: this.p(oSeconds)
    };
  },

  /**
   *  数组去重
   */
  uniq(array) {
    var temp = []; //一个新的临时数组
    for (var i = 0; i < array.length; i++) {
      if (temp.indexOf(array[i]) == -1) {
        temp.push(array[i]);
      }
    }
    return temp;
  },
  /**参数说明：
   * 根据长度截取先使用字符串，超长部分追加…
   * str 对象字符串
   * len 目标字节长度
   * 返回值： 处理结果字符串
   */
  cutString(str, len) {
    //length属性读出来的汉字长度为1
    if (str.length * 2 <= len) {
      return str;
    }
    var strlen = 0;
    var s = "";
    for (var i = 0; i < str.length; i++) {
      s = s + str.charAt(i);
      if (str.charCodeAt(i) > 128) {
        strlen = strlen + 2;
        if (strlen >= len) {
          return s.substring(0, s.length - 1) + "...";
        }
      } else {
        strlen = strlen + 1;
        if (strlen >= len) {
          return s.substring(0, s.length - 2) + "...";
        }
      }
    }
    return s;
  },
  /**
   * 根据身份证号获取 生日
   */
  getBirthdayFromIdCard(idCard) {
    var birthday = "";
    if (idCard != null && idCard != "") {
      if (idCard.length == 15) {
        birthday = "19" + idCard.substr(6, 6);
      } else if (idCard.length == 18) {
        birthday = idCard.substr(6, 8);
      }
      birthday = birthday.replace(/(.{4})(.{2})/, "$1-$2-");
    }
    return birthday;
  },
  /**
   * 根据身份证号获取 性别
   */
  getSexFromIdCard(idCard) {
    if (idCard != undefined && idCard != "") {
      var sexIndex = idCard.substr(idCard.length - 2, 1);
      if (Number(sexIndex) % 2 == 0) {
        return "女";
      } else {
        return "男";
      }
    }
  },
  /**
   * 根据 生日 获取 年龄
   */
  getAgeFromBirthday(val) {
    if (val == null || val == "" || val == undefined) {
      return "";
    }
    const cDate = new Date(val);
    return new Date().getFullYear() - parseInt(cDate.getFullYear()) + "";
  },

  /***
   * 计算文字长度
   */
  GetStringLength(str) {
    return str.replace(/[\u0391-\uFFE5]/g, "aa").length; //先把中文替换成两个字节的英文，在计算长度
  },
 
  /**
   *  url 参数解析
   */
  getUrlParams: function(names, urlSearch = location.href) {
    let urlParam = URL.parse(urlSearch);
    let urlObj = urlFormat.parse(urlParam.query);
    if (!urlObj[names]) {
      let hashObj = urlFormat.parse(urlParam.hash);
      for (let idx in Object.keys(hashObj)) {
        let key = Object.keys(hashObj)[idx];
        if (key.indexOf("?") != -1) {
          if (key.split("?")[1] == names) {
            return hashObj[key];
          }
        }
      }
      return hashObj[names];
    }
    return urlObj[names];
  },
  /**
   * 判断一个value 是否为空
   */
  isEmpty: function(val) {
    if (val) {
      if (val != null) {
        if (typeof val == "string") {
          if (val.length == 0) {
            return true;
          }
        }
      } else {
        return true;
      }
    } else {
      return true;
    }
    return false;
  }
};

window.currentiOSSystem = Utils.getCurrentSystemiOS();
export default Utils;
